package MID_Day01._01;

public class Sre01 {
    // JAVA全链路SRE - 对标DevOps/SRE
    // 网站可靠性工程师: 软件工程师 + 系统管理员
    // 冲击网站可靠性的主要原因: 并发量大小, 网络攻击
    /*```````````````````````````````````````````````正课_2024年6月24日```````````````````````````````````````````````*/
    // 系统: 操作系统
    /**
     * Windows(普通用户的客户端) Linux Unix MacOS(设计师 程序员的客户端 - 开发环境类似Linux - GPU要求高<显卡>) 安卓 鸿蒙 塞班(前期诺基亚手机系统)...
     *
     * Deepin系统 基于Linux系统的后续开发为类似Windows页面的系统
     *
     * Linux: 追求安全,稳定
     * Windows: 追求方便,便捷
     */
    // 服务器: 抽象概念 提供服务的机器
    // 一般都应用Linux系统 但是此处产生问题: Linux系统无法满足日常生活需求(例如浏览网站 网游...)
    // 措施: 虚拟化 - 例如使用VMware实现虚拟化CPU等硬件的操作
    /**
     * 电脑硬件: CPU 内存 磁盘...
     * 操作系统: Windows
     * 软件: 微信 QQ 网易云 IDEA VMware...
     * 虚拟硬件: v_CPU v_Memory v_disk...
     *  在此基础上 实现虚拟硬件并产生虚拟机(可生成多个虚拟机)
     */
    // 纯净版虚拟机设置方法
    /**
     * 1.右键: 以管理员身份运行VMware
     * 2.选择虚拟机启动
     * 3.退出电脑管家/360/火绒等安全软件
     * 4.Windows关闭防火墙
     *  4.1 win 搜索"控制面板"
     *  4.2 进入"系统与安全"
     *  4.3 进入"Windows Defender防火墙"
     *  4.4 左侧进入"启动或关闭 Windows Defender 防火墙" 并关闭专有网络及公有网络的防火墙
     * 5. win + E 进入文档管理页面
     *  5.1 右键左侧导航栏的"此电脑"
     *  5.2 点击"管理"(若windows版本为w11及以上 单击"更多设置"中的"管理")
     *  5.3 单击左侧导航栏的"服务和应用程序"
     *  5.3 双击"服务"打开控制程序运行方式的面板
     *  5.4 根据首字母 翻阅到"V"开头的部分 找到VMware部分 共五项
     *  5.5 将除"VMware自动启动服务"之外的四项调整为"自动" 并依次右键选择"启动"(表示本次服务启动)
     */
    // 操作系统: 软件的集合(核心软件 + 外围软件)
    // 核心软件: 服务器内核
    // 所有Linux系统的起始时间统一为: 1970-01-01 00:00:00  且此起始时间通过常规手段无法设置 需要做一定的配置才可设置
    // 绝对路径 相对路径
    /**
     * 路径: 数据的定位方式
     * Linux中该路径分为两种:
     * 1.绝对路径: 以根目录开始的路径
     * 2.相对路径: 不以根目录开始的路径 相对于当前所在位置的路径
     *
     * Linux为倒挂树型结构 (根下包含一级文件夹 一级文件夹下包含多个二级文件夹 每个二级文件夹下又可能包含多个三级文件夹) 所有的数据的起始点称为根目录(/)
     * Linux中 以"/"(根目录)作为起始点
     *
     * Linux中 只有第一个字符才会出现根目录 此时该路径为绝对路径 当开头字符无"/"时 此路径为相对路径
     * 例如: /a/b/c/d(绝对路径)
     *       a/b/c/d(相对路径) - 相对于a目录所在的位置 而非相对于a目录
     */
    // 前缀含义
    /**
     * [root@localhost ~]#: 当前登录的用户的用户名(root) 分隔符,无意义(@) 主机名(localhost: 本地) 当前所在目录符号(~: 家目录)
     *                   #: 表示当前登录的用户信息是可知的
     *                      此时有两种情况: 1.# 表示登陆者为root超级管理用户
     *                                   2.$ 表示登录者为普通用户
     */
    // 命令: 人类下发给计算机的指令
    /**
     * 标准使用格式: 命令字 [选项(放在[]中 可写可不写 当不写时会使用该选项的默认值)]
     * 命令标准使用格式: 命令(动作 操作) 选项(工具 选择 可多选) 参数(操作目标 可多选 多参数的命令称为"多参数命令")
     *  上述三部分之间至少使用一个空格隔开
     * 选项:
     *  短选项(-单词的简写): -h 或 -d 或 -l...
     *  长选项(--完整的单词): --help...
     *  复合选项(-多个短选项的组合): -hdl...
     * 注意: 短选项无法与长选项进行复合 二者之间必须使用空格分隔: ls -l -help
     */
    // 常用命令
    /**
     * ls: 列出目录中包含的数据(通过颜色的不同可区分不同的类型,若此命令后跟的是一个目录 表示查看该目录下的所有可见文件 若为文件名 表示查看该文件是否存在)
     *      蓝色: 文件夹/目录
     *      黑色: 文件
     *      青色: 快捷方式/连接文件
     *  选项: ls -l: 查看当前目录下的长格式显示的数据信息(类似于查看windows系统中的"属性")
     *       ls -l -d: 查看目录本身的自身属性
     *       ls -l -h: 表示显示文件大小时使用可读性更好的单位(例如: 1.2K 1.2M 1.2G)
     *       ls -lhd: 复合选项写法
     *       若在创建文件时命令将文件名前加上"." 表示该文件为隐藏文件(隐藏文件不会显示在当前目录下)
     *       ls -R -文件名: 查看当前目录下的所有文件(包括子目录)(递归查看: 查看指定路径及下方所有目录中的数据)
     *       ls -A -文件名: : 查看当前目录下的所有文件(包括隐藏文件)
     *
     * cat: 查看内容命令(完全展示 无法展示部分)
     *       cat -n -文件名: 查看文件内容(若文件内容过长 可通过-n参数查看文件内容时每行前添加行号)
     * less: 查看内容命令(可展示部分)
     *       ctrl f: 向下查找
     *       空格: 向下翻一页
     *       回车: 向下翻一行
     *       q: 退出
     *       /搜索关键字: 被搜索的关键字高亮显示
     *               n: 向下查找
     *               shift n: 向上查找
     * ifconfig: 查看网络信息
     *       ifconfig -ens160/ens192/ens33: 查看指定网卡的信息(数字根据电脑的不同可能不同)
     * mkdir: 创建目录
     *       mkdir -p -目录名1/目录名2/目录名3...: 创建多级目录
     * touch: 创建文件 可以一次性创建多个文件
     * head: 查看文件开头几行内容
     *       head -n 具体行数 -文件名: 查看文件开头几行内容
     *       head -行数 -文件名: 查看文件开头几行内容(简写)
     * tail: 查看文件结尾几行内容
     *       tail -n 具体行数 -文件名: 查看文件结尾几行内容
     *       tail -行数 -文件名: 查看文件结尾几行内容(简写)
     * 注意: 在head命令以及tail命令中 若不添加 -n参数 或 -行数参数 则默认为显示10行内容
     * poweroff: 关机
     * reboot: 重启
     */
    // 别名管理
    /**
     * 用于将复杂的命令进行简化
     * hostname: 查看主机名称
     * alias: 查看已存在的别名
     * alias 别名名称="命令": 创建别名(别名名称=命令)
     * unalias 别名名称: 删除别名
     * 示例: alias ls="ls -l -h"
     * 注意: 1.别名名称不能与系统命令名相同 且按照此方法创建的别名只能使用在当前会话窗口中 重启或关闭窗口后失效
     *        (若要永久生效 需要将别名写入到配置文件中)
     *      2.别名的优先级高于系统命令或原始别名
     */
    // 删除
    /**
     * 此删除操作需要进行判断 若同意 则会将目标目录永久删除 无法恢复
     * 因为权限问题 删除特殊文件时只有root用户能够删除
     * rm: 删除文件(若文件为目录 则无法删除)
     * rm -f 文件名: 删除文件(强力删除 无提示信息)
     * rm -r 文件名: 删除目录(若目录下存在子目录或文件 则会进行递归提示 直到最后一层后再进行递归删除)
     * rm -rf 文件名: 删除文件/目录(若目录下存在子目录或文件 会直接进行删除且无提示信息 若删除对象为文件 也会进行删除 此时短命令"r"不生效)
     * rmdir: 专门用于删除空目录(若目录下存在子目录或文件 则无法删除)
     */
    // 移动
    /**
     * mv: 移动文件/目录(若目标目录不存在 则会自动创建)
     * 注意: 此命令必须为多参数命令(必须指定源文件/目录和目标文件/目录)
     * mv 源文件/目录 目标文件/目录: 在此过程中 可以对目标文件/目录进行改名操作 即源文件/目录改名为目标文件/目录
     * mv 源文件/目录 目标文件/目录: 若路径相同 文件名相同 则为标准的重命名操作
     *  例如: mv /路径A/文件名1 /路径A/文件名2 即将文件名1改名为文件名2
     */
    // 查找命令程序文件
    /**
     * which: 查找命令所在的绝对路径(若命令不存在 则会提示)
     * which 命令名称: 查找命令所在的绝对路径
     * 通过将该绝对路径输入命令行 可以执行该命令
     */
    // 复制
    /**
     * cp: 复制文件
     * 不会使源文件消失
     * 可以在拷贝的过程中改名
     * cp支持多参数，最后一个为目标路径

     * cp -f: 强制模式 用于复制目录时使用 提示用户是否连同目录下的内容一并复制 但是实际上该模式并不会生效 原因如下
     *  -i(提示模式)的优先级高于-f(强制模式) 而在rm命令中-f的优先级高于-i
     *  解决方法: 因为cp命令本身是一种别名 因此可以使用转义符"\"将此处cp别名转义为原始版本 并配合-r声明当前复制的文件类型为目录 如下:
     *          \cp -r 目录1 目录2 ... 目标目录
     * cp -r: 复制目录
     * cp -p: 拷贝过程中 不会产生权限等属性的变化 完全保留文件的原属性原权限(所属用户 所属组等)
     */
    // 快捷操作
    /**
     * ctrl l: 清屏(相当于clear命令)
     * ctrl c: 退出/终止当前操作(废弃当前命令行 重启新的命令行)
     * esc + .: 复制上一行命令的参数(松开后再次按此组合 会将上上一行命令的参数复制下来将原本的参数覆盖掉)
     * alt + .: 复制上一行命令(松开后再次按此组合 会将上上一行命令复制下来将原本的命令覆盖掉 但是不建议使用 因为会与其他快捷键冲突)
     *
     * 快照: 用于定格虚拟机某一时刻状态的功能
     */
    //查看内核版本
    // uname -r: 查看内核版本
    //查看目录里的数据
    // ls
    // 查看当前所在的位置
    // pwd
    // 查看文件内容(特点: 非交互式)
    // cat
    // 查看文件内容(交互式/分页查看 按"/"进入搜素偶命令行 按n向下翻阅 按N向上翻阅 按q退出)
    // less
    // 查看文件开头几行内容
    // head
    // 查看文件结尾几行内容
    // tail
    // 移动文件(路径不变的移动可以完成重命名功能)
    // mv
    // 复制文件(不会使源文件消失 临时取消cp的别名)
    // cp
    // 创建目录
    // mkdir
    // 删除文件(强力模式)
    // rm -rf
    // 删除空目录
    // rmdir
    // 查看网络信息
    // ifconfig
    // 查看已存在的别名
    // alias
    // 创建别名
    // alias 别名名称="命令"
    // which 命令名称: 查找命令所在的绝对路径
    /*`````````````````````````````````````````````````2024年6月25日`````````````````````````````````````````````````*/
    // 快捷方式
    /**
     * 主要作用: 将复杂路径下的文件或资料放在比较简单的路径下 方便使用
     * 别称: 连接文件
     *  连接文件分类: 软连接 硬链接
     *  软连接:
     *      操作对象: 目录 或 文件
     *      格式: ln -s 源文件/目录 目标文件/目录
     *      特点: 源文件/目录被删除时 目标文件/目录将不可用(软连接)
     *      优点: 1.可存放在不同分区/文件系统中
     *           2.可进行重命名
     *      删除软连接: rm 软连接文件 - 注意: 输入删除软连接文件的命令时 不要在路径的最后添加"/" 若添加此符号 则删除的是软连接文件下的内容
     *      取消软连接: unlink 软连接文件
     *  硬链接:
     *      操作对象: 文件
     *      格式: ln 源文件 目标文件
     *      特点: 源文件被删除时 目标文件会变为独立文件 仍然可用(硬链接)
     *      缺点: 不能存放在不同分区/文件系统中
     */
    // 通配符
    /**
     * 概念: 使用固定的字符对数据进行模糊匹配
     * *: 匹配任意多个字符(0个或多个)
     * ?: 匹配任意一个字符(0个或1个)
     * [0-9]: 匹配该数字集合中的任意一个数字
     * [0-9][0-9]: 匹配该数字集合中的任意二个数字
     * 以此类推...
     * [a-z]: 匹配该字母集合中的任意一个字母
     * [a-z][a-z]: 匹配该字母集合中的任意二个字母
     * 以此类推...
     * {元素1,元素2,元素3...}: 严格匹配集合中的任意一个元素
     *    此匹配方法一般应用于查找多个同路径下的文件
     *      例:  一般写法: ls /opt/a.txt /opt/b.txt /opt/c.txt /opt/d.txt
     *         通配符写法: ls /opt/{a,b,c,d}.txt
     */
    // 重定向:
    /**
     * 概念: 将前方命令输出内容保存到文件
     *  覆盖重定向  > : 将命令的输出结果重定向到指定的文件中
     *      格式: 命令 [命令选项] > 文件名
     *  追加重定向 >> : 将命令的输出结果追加到指定的文件中
     *      格式: 命令 [命令选项] >> 文件名
     * 作用: 1. > 将命令的输出结果保存到文件中(覆盖)
     *      2.>> 将命令的输出结果追加到文件中
     *      3. > 当无"命令"部分时 根据不同使用场景有两种作用(格式: > /dev/a.txt):
     *          3.1 创建空文件(将空内容重定向至未创建的文件 借助重定向的创建功能创建文件)
     *          3.2 清空文件内容(将空内容重定向至已创建的文件 借助覆盖重定向的覆盖功能清空文件)
     *
     */
    /*
        输出指令: echo "输出内容" -> 在屏幕中输出文件
        引号何时添加: 当输出内容中有空格时 引号必须添加作为一个整体输出 或包含字符 需要添加引号防止符号被识别为通配符等
    */
    // 管道操作
    /**
     * 概念: 将一个命令的输出结果作为另一个命令的输入参数
     * 格式: 命令1 [命令选项] | 命令2 [命令选项]
     * 例如: find /etc/ -name "*tab*" -exec cp {} /opt/ \; - 将/etc/下的所有包含tab的配置文件复制到/opt/目录下
     * 其中: -exec 表示 执行命令
     *       \; 表示 结束命令
     *       {} 表示 -exec前的命令匹配到的文件/目录 作为后续操作的参数
     */
    // find基本使用
    /**
     * 概念: 精确查找 地毯式查找 隐藏目录/文件都会被检索
     *      递归式查找(目录下的子目录等也会被检索)
     *      查找过程中如果遇到/proc目录下的报错，属于正常现象，因为/proc不占用磁盘空间，占用的是内存空间
     查找方式:
     1 按类型查找: find [路径] -type [类型]
     *          类型: f: 文件
     *               d: 目录
     *               l: 链接文件
     * 查找结果: "-"开头: 文件(颜色为黑色/绿色等<根据执行权限的不同 颜色不同>)
     *         "d"开头: 目录(颜色为蓝色)
     *         "l"开头: 链接文件(颜色为青色)
     *
     2.1 按名称查找: find [路径] -name ["名称"]
     *      例如: find /boot/ -name "*.txt" - 查找/boot目录下的所有.txt后缀的文件
     2.2 按名称模糊查找: find [路径] -iname [名称]
     *      例如: find /boot/ -iname "*.txt" - 查找/boot目录下的所有.txt后缀的文件(忽略大小写)
     *
     3 按大小查找: find [路径] -size [+大小]
     *           大小: k: kb为单位
     *                M: MB为单位
     *                G: GB为单位
     *
     4 按修改时间查找: find [路径] -mtime [+/-时间]
     * 访问时间:atime 创建时间:ctime 修改时间:mtime
     * 在find中 时间只有过去 没有将来 包含两个范围:
     *  近十天: -10
     *  十天前: +10
     *
     5 按所有者查找: find [路径] -user [用户名]
     * 例如: find /home/ -user lisa - 查找/home目录下的所有lisa用户创建的文件
     *
     6 find多条件使用
     * 多个条件之间使用如下两符号按需连接 若不添加连接符 则默认为逻辑与 -a
     * -a: 逻辑与 - 并且
     * -o: 逻辑或 - 或者
     * 例如: find /home/ -user lisa -type f -mtime +10 -a -size +10k - 查找/home目录下的lisa用户创建的文件 大于10kb 大于10天
     *
     7 find高级使用
     * find操作在进行二次操作时 默认无法与管道操作共同使用
     * 需要使用-exec选项连接才可实现二次操作
     * 格式: find [路径] [命令选项] -exec [命令] [命令选项] {} \;
     * 其中: {}代表当前查找到的文件/目录(类似于循环变量)
     *      \;代表结束符
     */
    // grep基本使用
    /**
     * 功能: 输出包含指定字符/匹配规则的行
     * 格式: grep [选项] "查找条件"(单引号双引号都可以 但是推荐双引号) 目标文件
     *    选项:
     *      -i: 查找时忽略关键字大小写
     *      -v: 对查找结果去反（匹配不包含指定字符/不满足条件的行）
     *    查找条件:
     *      "^关键字": 匹配关键字开头的行
     *      "关键字$": 匹配关键字结尾的行
     *      "^$": 匹配空行
     * 例如: grep -v "^#" /etc/default/useradd | grep -v "^$" - 查找/etc/default/useradd路径中的所有有效代码
     */
    // vim文本编辑器
    /**
     * 格式: vim [路径][文件名]
     * 功能: 对文本进行修改/新建
     *  1.若文件不存在 则新建文件
     *  2.若文件已存在 则打开文件
     * 模式: 命令模式 编辑(插入)模式 末行模式
     *  1.命令模式: 进入vim视图 默认为命令模式 在插入模式中按`esc`进入命令模式
     *  2.编辑模式: 输入i进入编辑模式
     *  3.末行模式: 在命令模式中输入英文版本的":"进入末行模式
     * 退出vim时
     *  在末行模式中输入"wq"实现保存并退出
     *  在末行模式中输入"q!"实现强制退出不保存此次对文件的编辑
     */
    // 压缩
    /**
     * 苹果电脑默认不支持rar压缩 但是支持zip压缩和7z压缩
     * TODO 压缩 解压缩笔记及Zip压缩解压缩扩展
     * 归档的含义:
     *   将许多零散的文件整理为一个文件
     *   文件总的大小基本不变
     * 压缩的含义:
     *   按某种算法减小文件所占用空间的大小
     *   恢复时按对应的逆向算法解压
     * 压缩格式	扩展名	特点
     * gzip	    .gz	    速度快，压缩比例低
     * bzip2	.bz2	速度中等，压缩比例中等
     * xz	    .xz	    速度慢，压缩比例高
     * tar命令工具
     *   -c:创建归档
     *   -x:释放归档
     *   -f:指定归档文件名称
     *   -z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理
     *   -t:显示归档中的文件清单
     *   -C(大写):指定释放的位置
     * 注：f选项必须放在所有选项的最后
     */
    /* du -sh [文件名1] [文件名2] 该命令可以查看当前目录下指定文件的大小 */















}
